#include <assert.h>

#include <libxml/parser.h>
#include <libxml/xmlschemas.h>

#include "prepaid.h"

xmlDocPtr validateXml(const char *schema, xmlDocPtr doc) {
  xmlSchemaParserCtxtPtr parser;
  xmlSchemaValidCtxtPtr vctx;
  xmlSchemaPtr schemap;

  parser = xmlSchemaNewParserCtxt(schema);
  assert(parser);
  schemap = xmlSchemaParse(parser);
  assert(schemap);
  vctx = xmlSchemaNewValidCtxt(schemap);
  assert(vctx);
  assert(!xmlSchemaValidateDoc(vctx, doc));
  return doc;
}

xmlDocPtr validateXmlFile(const char *schema, const char *file) {
  xmlDocPtr doc;

  doc = xmlParseFile(file);
  assert(doc);
  return validateXml(schema, doc);
}

xmlDocPtr validateXmlMem(const char *schema, const char *buf, int len) {
  xmlDocPtr doc;

  doc = xmlParseMemory(buf, len);
  assert(doc);
  return validateXml(schema, doc);
}

